
CREATE SEQUENCE estado_password_idestado_seq;

CREATE TABLE ESTADO_PASSWORD (
                idEstado INTEGER NOT NULL DEFAULT nextval('estado_password_idestado_seq'),
                descripcion VARCHAR NOT NULL,
                CONSTRAINT estado_password_pk PRIMARY KEY (idEstado)
);

CREATE SEQUENCE objeto_idobjeto_seq;

CREATE TABLE OBJETO (
                idObjeto INTEGER NOT NULL DEFAULT nextval('objeto_idobjeto_seq'),
                descripcion VARCHAR NOT NULL,
                CONSTRAINT objeto_pk PRIMARY KEY (idObjeto)
);

CREATE SEQUENCE actividad_idactividad_seq;

CREATE TABLE ACTIVIDAD (
                idActividad INTEGER NOT NULL DEFAULT nextval('actividad_idactividad_seq'),
                descripcion VARCHAR NOT NULL,
                CONSTRAINT actividad_pk PRIMARY KEY (idActividad)
);

CREATE SEQUENCE moneda_idmoneda_seq;

CREATE TABLE MONEDA (
                idMoneda INTEGER NOT NULL DEFAULT nextval('moneda_idmoneda_seq'),
                nombre VARCHAR NOT NULL,
                simbolo VARCHAR NOT NULL,
                unidad VARCHAR NOT NULL,
                cambio DOUBLE PRECISION NOT NULL,
                CONSTRAINT moneda_pk PRIMARY KEY (idMoneda)
);
COMMENT ON COLUMN MONEDA.cambio IS 'cambio a dolares';

CREATE SEQUENCE conexion_idconexion_seq;

CREATE TABLE CONEXION (
                idConexion INTEGER NOT NULL DEFAULT nextval('conexion_idconexion_seq'),
                descripcion VARCHAR NOT NULL,
                CONSTRAINT conexion_pk PRIMARY KEY (idConexion)
);

CREATE SEQUENCE estado_paquete_idestado_seq;

CREATE TABLE ESTADO_PAQUETE (
                idEstado INTEGER NOT NULL DEFAULT nextval('estado_paquete_idestado_seq'),
                descripcion VARCHAR NOT NULL,
                CONSTRAINT estado_paquete_pk PRIMARY KEY (idEstado)
);

CREATE SEQUENCE tipo_correo_idtipocorreo_seq;

CREATE TABLE TIPO_CORREO (
                idTipoCorreo INTEGER NOT NULL DEFAULT nextval('tipo_correo_idtipocorreo_seq'),
                descripcion VARCHAR NOT NULL,
                extension VARCHAR NOT NULL,
                CONSTRAINT tipo_correo_pk PRIMARY KEY (idTipoCorreo)
);

CREATE SEQUENCE tipo_cliente_idtipo_seq;

CREATE TABLE TIPO_CLIENTE (
                idTipo INTEGER NOT NULL DEFAULT nextval('tipo_cliente_idtipo_seq'),
                descripcion VARCHAR NOT NULL,
                CONSTRAINT tipo_cliente_pk PRIMARY KEY (idTipo)
);

CREATE SEQUENCE estado_vuelo_idestado_seq;

CREATE TABLE ESTADO_VUELO (
                idEstado INTEGER NOT NULL DEFAULT nextval('estado_vuelo_idestado_seq'),
                descripcion VARCHAR NOT NULL,
                CONSTRAINT estado_vuelo_pk PRIMARY KEY (idEstado)
);

CREATE SEQUENCE tipo_documento_idtipodoc_seq;

CREATE TABLE TIPO_DOCUMENTO (
                idTipoDoc INTEGER NOT NULL DEFAULT nextval('tipo_documento_idtipodoc_seq'),
                descripcion VARCHAR NOT NULL,
                CONSTRAINT tipo_documento_pk PRIMARY KEY (idTipoDoc)
);

CREATE SEQUENCE tipo_escala_idtipo_seq;

CREATE TABLE TIPO_ESCALA (
                idTipo INTEGER NOT NULL DEFAULT nextval('tipo_escala_idtipo_seq'),
                descripcion VARCHAR NOT NULL,
                CONSTRAINT tipo_escala_pk PRIMARY KEY (idTipo)
);

CREATE SEQUENCE estado_perfil_idestado_seq;

CREATE TABLE ESTADO_PERFIL (
                idEstado INTEGER NOT NULL DEFAULT nextval('estado_perfil_idestado_seq'),
                descripcion VARCHAR NOT NULL,
                CONSTRAINT estado_perfil_pk PRIMARY KEY (idEstado)
);

CREATE SEQUENCE estado_avion_idestado_seq;

CREATE TABLE ESTADO_AVION (
                idEstado INTEGER NOT NULL DEFAULT nextval('estado_avion_idestado_seq'),
                descripcion VARCHAR NOT NULL,
                CONSTRAINT estado_avion_pk PRIMARY KEY (idEstado)
);

CREATE SEQUENCE tipo_elemento_idtipo_seq;

CREATE TABLE TIPO_ELEMENTO (
                idTipo INTEGER NOT NULL DEFAULT nextval('tipo_elemento_idtipo_seq'),
                descripcion VARCHAR NOT NULL,
                CONSTRAINT tipo_elemento_pk PRIMARY KEY (idTipo)
);

CREATE SEQUENCE tipo_movimiento_idtipomov_seq;

CREATE TABLE TIPO_MOVIMIENTO (
                idTipoMov INTEGER NOT NULL DEFAULT nextval('tipo_movimiento_idtipomov_seq'),
                descripcion VARCHAR NOT NULL,
                CONSTRAINT tipo_movimiento_pk PRIMARY KEY (idTipoMov)
);

CREATE SEQUENCE tipo_pago_idtipo_seq;

CREATE TABLE TIPO_PAGO (
                idTipo INTEGER NOT NULL DEFAULT nextval('tipo_pago_idtipo_seq'),
                descripcion VARCHAR NOT NULL,
                CONSTRAINT tipo_pago_pk PRIMARY KEY (idTipo)
);

CREATE SEQUENCE estado_cliente_idestado_seq;

CREATE TABLE ESTADO_CLIENTE (
                idEstado INTEGER NOT NULL DEFAULT nextval('estado_cliente_idestado_seq'),
                descripcion VARCHAR NOT NULL,
                CONSTRAINT estado_cliente_pk PRIMARY KEY (idEstado)
);

CREATE SEQUENCE estado_usuario_idestado_seq;

CREATE TABLE ESTADO_USUARIO (
                idEstado INTEGER NOT NULL DEFAULT nextval('estado_usuario_idestado_seq'),
                descripcion VARCHAR NOT NULL,
                CONSTRAINT estado_usuario_pk PRIMARY KEY (idEstado)
);

CREATE SEQUENCE estado_itinerario_idestado_seq;

CREATE TABLE ESTADO_ITINERARIO (
                idEstado INTEGER NOT NULL DEFAULT nextval('estado_itinerario_idestado_seq'),
                descripcion VARCHAR NOT NULL,
                CONSTRAINT estado_itinerario_pk PRIMARY KEY (idEstado)
);

CREATE SEQUENCE estado_nota_credito_idestado_seq;

CREATE TABLE ESTADO_NOTA_CREDITO (
                idEstado INTEGER NOT NULL DEFAULT nextval('estado_nota_credito_idestado_seq'),
                descripcion VARCHAR NOT NULL,
                CONSTRAINT estado_nota_credito_pk PRIMARY KEY (idEstado)
);

CREATE SEQUENCE estado_envio_idestado_seq;

CREATE TABLE ESTADO_ENVIO (
                idEstado INTEGER NOT NULL DEFAULT nextval('estado_envio_idestado_seq'),
                descripcion VARCHAR NOT NULL,
                CONSTRAINT estado_envio_pk PRIMARY KEY (idEstado)
);

CREATE SEQUENCE estado_aeropuerto_idestado_seq;

CREATE TABLE ESTADO_AEROPUERTO (
                idEstado INTEGER NOT NULL DEFAULT nextval('estado_aeropuerto_idestado_seq'),
                descripcion VARCHAR NOT NULL,
                CONSTRAINT estado_aeropuerto_pk PRIMARY KEY (idEstado)
);

CREATE SEQUENCE elemento_idelemento_seq;

CREATE TABLE ELEMENTO (
                idElemento INTEGER NOT NULL DEFAULT nextval('elemento_idelemento_seq'),
                idTipo INTEGER NOT NULL,
                descripcion VARCHAR NOT NULL,
                CONSTRAINT elemento_pk PRIMARY KEY (idElemento)
);

CREATE SEQUENCE tipo_avion_idtipo_seq;

CREATE TABLE TIPO_AVION (
                idTipo INTEGER NOT NULL DEFAULT nextval('tipo_avion_idtipo_seq'),
                descripcion VARCHAR,
                velMin DOUBLE PRECISION NOT NULL,
                velMax DOUBLE PRECISION NOT NULL,
                distMax DOUBLE PRECISION NOT NULL,
                capPack INTEGER NOT NULL,
                costAvion DOUBLE PRECISION NOT NULL,
                fechaReg TIMESTAMP NOT NULL,
                CONSTRAINT tipo_avion_pk PRIMARY KEY (idTipo)
);

CREATE SEQUENCE avion_sim_idavion_seq;

CREATE TABLE AVION_SIM (
                idAvion INTEGER NOT NULL DEFAULT nextval('avion_sim_idavion_seq'),
                idTipo INTEGER NOT NULL,
                idEstado INTEGER NOT NULL,
                fechaReg TIMESTAMP NOT NULL,
                CONSTRAINT avion_sim_pk PRIMARY KEY (idAvion)
);

CREATE SEQUENCE continente_idcontinente_seq;

CREATE TABLE CONTINENTE (
                idContinente INTEGER NOT NULL DEFAULT nextval('continente_idcontinente_seq'),
                descripcion VARCHAR NOT NULL,
                CONSTRAINT continente_pk PRIMARY KEY (idContinente)
);

CREATE SEQUENCE pais_idpais_seq;

CREATE TABLE PAIS (
                idPais INTEGER NOT NULL DEFAULT nextval('pais_idpais_seq'),
                idContinente INTEGER NOT NULL,
                descripcion VARCHAR NOT NULL,
                iso VARCHAR NOT NULL,
                gmt INTEGER,
                CONSTRAINT pais_pk PRIMARY KEY (idPais)
);

CREATE SEQUENCE impuesto_idimpuesto_seq;

CREATE TABLE IMPUESTO (
                idImpuesto INTEGER NOT NULL DEFAULT nextval('impuesto_idimpuesto_seq'),
                idPais INTEGER NOT NULL,
                aka VARCHAR,
                iva DOUBLE PRECISION NOT NULL,
                CONSTRAINT impuesto_pk PRIMARY KEY (idImpuesto)
);

CREATE SEQUENCE divisa_iddivisa_seq;

CREATE TABLE DIVISA (
                idDivisa INTEGER NOT NULL DEFAULT nextval('divisa_iddivisa_seq'),
                idMoneda INTEGER NOT NULL,
                idPais INTEGER NOT NULL,
                CONSTRAINT divisa_pk PRIMARY KEY (idDivisa)
);

CREATE SEQUENCE avion_idavion_seq;

CREATE TABLE AVION (
                idAvion INTEGER NOT NULL DEFAULT nextval('avion_idavion_seq'),
                idTipo INTEGER NOT NULL,
                idEstado INTEGER NOT NULL,
                fechaReg TIMESTAMP NOT NULL,
                CONSTRAINT avion_pk PRIMARY KEY (idAvion)
);

CREATE SEQUENCE ciudad_idciudad_seq;

CREATE TABLE CIUDAD (
                idCiudad INTEGER NOT NULL DEFAULT nextval('ciudad_idciudad_seq'),
                idPais INTEGER NOT NULL,
                latitud DOUBLE PRECISION NOT NULL,
                altitud DOUBLE PRECISION NOT NULL,
                cordX DOUBLE PRECISION NOT NULL,
                cordY DOUBLE PRECISION NOT NULL,
                descripcion VARCHAR NOT NULL,
                CONSTRAINT ciudad_pk PRIMARY KEY (idCiudad)
);

CREATE SEQUENCE aeropuerto_sim_idaeropuerto_seq;

CREATE TABLE AEROPUERTO_SIM (
                idAeropuerto INTEGER NOT NULL DEFAULT nextval('aeropuerto_sim_idaeropuerto_seq'),
                descripcion VARCHAR,
                idCiudad INTEGER NOT NULL,
                idEstado INTEGER NOT NULL,
                costoAeropuerto DOUBLE PRECISION NOT NULL,
                tRetencion INTEGER NOT NULL,
                costPack DOUBLE PRECISION NOT NULL,
                numPack INTEGER,
                capPack INTEGER NOT NULL,
                fechaReg TIMESTAMP NOT NULL,
                CONSTRAINT aeropuerto_sim_pk PRIMARY KEY (idAeropuerto)
);

CREATE SEQUENCE vuelo_sim_idvuelo_seq;

CREATE TABLE VUELO_SIM (
                idVuelo INTEGER NOT NULL DEFAULT nextval('vuelo_sim_idvuelo_seq'),
                idOrigen INTEGER NOT NULL,
                idDestino INTEGER NOT NULL,
                idAvion INTEGER NOT NULL,
                idEstado INTEGER NOT NULL,
                salida TIMESTAMP,
                salidaEst TIMESTAMP NOT NULL,
                llegada TIMESTAMP,
                llegadaEst TIMESTAMP NOT NULL,
                recorrido DOUBLE PRECISION,
                numPack INTEGER,
                retraso VARCHAR,
                costo DOUBLE PRECISION,
                CONSTRAINT vuelo_sim_pk PRIMARY KEY (idVuelo)
);
COMMENT ON TABLE VUELO_SIM IS 'Los viajes realizados del avion';
COMMENT ON COLUMN VUELO_SIM.retraso IS 'se explica el motivo de retraso en caso hubiera';

CREATE SEQUENCE pronostico_sim_idpronostico_seq;

CREATE TABLE PRONOSTICO_SIM (
                idPronostico INTEGER NOT NULL DEFAULT nextval('pronostico_sim_idpronostico_seq'),
                idAeropuerto INTEGER NOT NULL,
                fechaReg TIMESTAMP NOT NULL,
                nroPack INTEGER NOT NULL,
                CONSTRAINT pronostico_sim_pk PRIMARY KEY (idPronostico)
);

CREATE SEQUENCE cliente_idcliente_seq;

CREATE TABLE CLIENTE (
                idCliente INTEGER NOT NULL DEFAULT nextval('cliente_idcliente_seq'),
                idCiudad INTEGER NOT NULL,
                idEstado INTEGER NOT NULL,
                idTipoDoc INTEGER NOT NULL,
                idTipo INTEGER NOT NULL,
                idTipoCorreo INTEGER NOT NULL,
                numDoc VARCHAR NOT NULL,
                correo VARCHAR NOT NULL,
                nombre VARCHAR NOT NULL,
                apMaterno VARCHAR NOT NULL,
                apPaterno VARCHAR NOT NULL,
                fechaReg TIMESTAMP NOT NULL,
                CONSTRAINT cliente_pk PRIMARY KEY (idCliente)
);
COMMENT ON TABLE CLIENTE IS 'Los clientes que solicitan el servicio de envio de paquetes';

CREATE SEQUENCE aeropuerto_idaeropuerto_seq;

CREATE TABLE AEROPUERTO (
                idAeropuerto INTEGER NOT NULL DEFAULT nextval('aeropuerto_idaeropuerto_seq'),
                descripcion VARCHAR,
                idCiudad INTEGER NOT NULL,
                idEstado INTEGER NOT NULL,
                costoAeropuerto DOUBLE PRECISION NOT NULL,
                tRetencion INTEGER NOT NULL,
                costPack DOUBLE PRECISION NOT NULL,
                numPack INTEGER,
                capPack INTEGER NOT NULL,
                fechaReg TIMESTAMP NOT NULL,
                CONSTRAINT aeropuerto_pk PRIMARY KEY (idAeropuerto)
);

CREATE SEQUENCE vuelo_idvuelo_seq;

CREATE TABLE VUELO (
                idVuelo INTEGER NOT NULL DEFAULT nextval('vuelo_idvuelo_seq'),
                idOrigen INTEGER NOT NULL,
                idDestino INTEGER NOT NULL,
                idAvion INTEGER NOT NULL,
                idEstado INTEGER NOT NULL,
                salida TIMESTAMP,
                salidaEst TIMESTAMP NOT NULL,
                llegada TIMESTAMP,
                llegadaEst TIMESTAMP NOT NULL,
                recorrido DOUBLE PRECISION,
                numPack INTEGER,
                retraso VARCHAR,
                costo DOUBLE PRECISION,
                CONSTRAINT vuelo_pk PRIMARY KEY (idVuelo)
);
COMMENT ON TABLE VUELO IS 'Los viajes realizados del avion';
COMMENT ON COLUMN VUELO.retraso IS 'se explica el motivo de retraso en caso hubiera';

CREATE SEQUENCE pronostico_idpronostico_seq;

CREATE TABLE PRONOSTICO (
                idPronostico INTEGER NOT NULL DEFAULT nextval('pronostico_idpronostico_seq'),
                idAeropuerto INTEGER NOT NULL,
                fechaReg TIMESTAMP NOT NULL,
                nroPack INTEGER NOT NULL,
                CONSTRAINT pronostico_pk PRIMARY KEY (idPronostico)
);

CREATE SEQUENCE perfil_idperfil_seq;

CREATE TABLE PERFIL (
                idPerfil INTEGER NOT NULL DEFAULT nextval('perfil_idperfil_seq'),
                descripcion VARCHAR NOT NULL,
                durPass INTEGER NOT NULL,
                durSesion INTEGER NOT NULL,
                idEstado INTEGER NOT NULL,
                fechaReg TIMESTAMP NOT NULL,
                CONSTRAINT perfil_pk PRIMARY KEY (idPerfil)
);

CREATE SEQUENCE configuracion_idconfiguracion_seq;

CREATE TABLE CONFIGURACION (
                idConfiguracion INTEGER NOT NULL DEFAULT nextval('configuracion_idconfiguracion_seq'),
                minPassLong INTEGER NOT NULL,
                numCarEsp INTEGER NOT NULL,
                numCarAlf INTEGER NOT NULL,
                numCarNum INTEGER NOT NULL,
                tarifaDist DOUBLE PRECISION NOT NULL,
                tMaxCont INTEGER NOT NULL,
                tMaxInterCont INTEGER NOT NULL,
                fechaReg TIMESTAMP NOT NULL,
                fechaMod TIMESTAMP NOT NULL,
                direccion1 VARCHAR NOT NULL,
                direccion2 VARCHAR NOT NULL,
                direccion3 VARCHAR NOT NULL,
                CONSTRAINT configuracion_pk PRIMARY KEY (idConfiguracion)
);

CREATE SEQUENCE permiso_idpermiso_seq;

CREATE TABLE PERMISO (
                idPermiso INTEGER NOT NULL DEFAULT nextval('permiso_idpermiso_seq'),
                idPerfil INTEGER NOT NULL,
                idElemento INTEGER NOT NULL,
                permiso INTEGER NOT NULL,
                CONSTRAINT permiso_pk PRIMARY KEY (idPermiso)
);

CREATE SEQUENCE usuario_idusuario_seq;

CREATE TABLE USUARIO (
                idUsuario INTEGER NOT NULL DEFAULT nextval('usuario_idusuario_seq'),
                idPerfil INTEGER NOT NULL,
                idEstado INTEGER NOT NULL,
                idTipoDoc INTEGER NOT NULL,
                idTipoCorreo INTEGER NOT NULL,
                idConexion INTEGER NOT NULL,
                idAeropuerto INTEGER NOT NULL,
                documento VARCHAR NOT NULL,
                direccion VARCHAR,
                correo VARCHAR NOT NULL,
                telefono VARCHAR,
                nombre VARCHAR NOT NULL,
                apMaterno VARCHAR NOT NULL,
                apPaterno VARCHAR NOT NULL,
                nombUsr VARCHAR NOT NULL,
                numFallo INTEGER NOT NULL,
                maxFallo INTEGER NOT NULL,
                fechaReg TIMESTAMP NOT NULL,
                CONSTRAINT usuario_pk PRIMARY KEY (idUsuario)
);

CREATE SEQUENCE log_idlog_seq;

CREATE TABLE LOG (
                idLog INTEGER NOT NULL DEFAULT nextval('log_idlog_seq'),
                idObjeto INTEGER NOT NULL,
                idActividad INTEGER NOT NULL,
                idPerfil INTEGER NOT NULL,
                idUsuario INTEGER NOT NULL,
                ip VARCHAR NOT NULL,
                descripcion VARCHAR NOT NULL,
                fechaReg TIMESTAMP NOT NULL,
                CONSTRAINT log_pk PRIMARY KEY (idLog)
);

CREATE SEQUENCE password_idpassword_seq;

CREATE TABLE PASSWORD (
                idPassword INTEGER NOT NULL DEFAULT nextval('password_idpassword_seq'),
                idUsuario INTEGER NOT NULL,
                pass VARCHAR NOT NULL,
                fechaReg TIMESTAMP NOT NULL,
                idEstado INTEGER NOT NULL,
                CONSTRAINT password_pk PRIMARY KEY (idPassword)
);

CREATE SEQUENCE envio_idenvio_seq;

CREATE TABLE ENVIO (
                idEnvio INTEGER NOT NULL DEFAULT nextval('envio_idenvio_seq'),
                idCliente INTEGER NOT NULL,
                idEstado INTEGER NOT NULL,
                idUsuario INTEGER NOT NULL,
                idAeropuerto INTEGER NOT NULL,
                direccion VARCHAR NOT NULL,
                receptor VARCHAR NOT NULL,
                costo DOUBLE PRECISION NOT NULL,
                puntaje INTEGER NOT NULL,
                numPack INTEGER NOT NULL,
                numPackLost INTEGER NOT NULL,
                fechaReg TIMESTAMP NOT NULL,
                CONSTRAINT envio_pk PRIMARY KEY (idEnvio)
);
COMMENT ON COLUMN ENVIO.direccion IS 'direccion de destino';
COMMENT ON COLUMN ENVIO.costo IS 'costo para la empresa';

CREATE SEQUENCE paquete_sim_idpaquete_seq;

CREATE TABLE PAQUETE_SIM (
                idPaquete INTEGER NOT NULL DEFAULT nextval('paquete_sim_idpaquete_seq'),
                idEnvio INTEGER NOT NULL,
                idEstado INTEGER NOT NULL,
                CONSTRAINT paquete_sim_pk PRIMARY KEY (idPaquete)
);
COMMENT ON TABLE PAQUETE_SIM IS 'El encargo pedido por el cliente';

CREATE SEQUENCE itinerario_sim_iditinerario_seq;

CREATE TABLE ITINERARIO_SIM (
                idItinerario INTEGER NOT NULL DEFAULT nextval('itinerario_sim_iditinerario_seq'),
                idTipo INTEGER NOT NULL,
                idEnvio INTEGER NOT NULL,
                idEstado INTEGER NOT NULL,
                idVuelo INTEGER NOT NULL,
                seq INTEGER NOT NULL,
                CONSTRAINT itinerario_sim_pk PRIMARY KEY (idItinerario)
);
COMMENT ON TABLE ITINERARIO_SIM IS 'Detalle de cada viaje del itinerario del paquete';

CREATE SEQUENCE itinerario_iditinerario_seq;

CREATE TABLE ITINERARIO (
                idItinerario INTEGER NOT NULL DEFAULT nextval('itinerario_iditinerario_seq'),
                idTipo INTEGER NOT NULL,
                idEnvio INTEGER NOT NULL,
                idEstado INTEGER NOT NULL,
                idVuelo INTEGER NOT NULL,
                seq INTEGER NOT NULL,
                CONSTRAINT itinerario_pk PRIMARY KEY (idItinerario)
);
COMMENT ON TABLE ITINERARIO IS 'Detalle de cada viaje del itinerario del paquete';

CREATE SEQUENCE nota_credito_idnotacredito_seq;

CREATE TABLE NOTA_CREDITO (
                idNotaCredito INTEGER NOT NULL DEFAULT nextval('nota_credito_idnotacredito_seq'),
                idEnvio INTEGER NOT NULL,
                idEstado INTEGER NOT NULL,
                idUsuario INTEGER NOT NULL,
                monto DOUBLE PRECISION NOT NULL,
                fechaReg TIMESTAMP NOT NULL,
                CONSTRAINT nota_credito_pk PRIMARY KEY (idNotaCredito)
);

CREATE SEQUENCE pago_idpago_seq;

CREATE TABLE PAGO (
                idPago INTEGER NOT NULL DEFAULT nextval('pago_idpago_seq'),
                idEnvio INTEGER NOT NULL,
                idTipo INTEGER NOT NULL,
                idMoneda INTEGER NOT NULL,
                monto DOUBLE PRECISION NOT NULL,
                idUsuario INTEGER NOT NULL,
                fechaReg TIMESTAMP NOT NULL,
                CONSTRAINT pago_pk PRIMARY KEY (idPago)
);
COMMENT ON COLUMN PAGO.monto IS 'monto para el cliente';

CREATE SEQUENCE paquete_idpaquete_seq;

CREATE TABLE PAQUETE (
                idPaquete INTEGER NOT NULL DEFAULT nextval('paquete_idpaquete_seq'),
                idEnvio INTEGER NOT NULL,
                idEstado INTEGER NOT NULL,
                CONSTRAINT paquete_pk PRIMARY KEY (idPaquete)
);
COMMENT ON TABLE PAQUETE IS 'El encargo pedido por el cliente';

CREATE SEQUENCE inventario_idinventario_seq;

CREATE TABLE INVENTARIO (
                idInventario INTEGER NOT NULL DEFAULT nextval('inventario_idinventario_seq'),
                idAeropuerto INTEGER NOT NULL,
                idTipoMov INTEGER NOT NULL,
                idUsuario INTEGER NOT NULL,
                idEnvio INTEGER NOT NULL,
                fechaReg TIMESTAMP NOT NULL,
                CONSTRAINT inventario_pk PRIMARY KEY (idInventario)
);

CREATE SEQUENCE sesion_idsesion_seq;

CREATE TABLE SESION (
                idSesion INTEGER NOT NULL DEFAULT nextval('sesion_idsesion_seq'),
                idUsuario INTEGER NOT NULL,
                ip VARCHAR NOT NULL,
                mac VARCHAR NOT NULL,
                entrada TIMESTAMP NOT NULL,
                salida TIMESTAMP NOT NULL,
                CONSTRAINT sesion_pk PRIMARY KEY (idSesion)
);

ALTER TABLE PASSWORD ADD CONSTRAINT estado_password_password_fk
FOREIGN KEY (idEstado)
REFERENCES ESTADO_PASSWORD (idEstado)
ON DELETE NO ACTION
ON UPDATE NO ACTION
NOT DEFERRABLE;

ALTER TABLE LOG ADD CONSTRAINT objeto_log_fk
FOREIGN KEY (idObjeto)
REFERENCES OBJETO (idObjeto)
ON DELETE NO ACTION
ON UPDATE NO ACTION
NOT DEFERRABLE;

ALTER TABLE LOG ADD CONSTRAINT actividad_log_fk
FOREIGN KEY (idActividad)
REFERENCES ACTIVIDAD (idActividad)
ON DELETE NO ACTION
ON UPDATE NO ACTION
NOT DEFERRABLE;

ALTER TABLE PAGO ADD CONSTRAINT moneda_pago_fk
FOREIGN KEY (idMoneda)
REFERENCES MONEDA (idMoneda)
ON DELETE NO ACTION
ON UPDATE NO ACTION
NOT DEFERRABLE;

ALTER TABLE DIVISA ADD CONSTRAINT moneda_monedaxpais_fk
FOREIGN KEY (idMoneda)
REFERENCES MONEDA (idMoneda)
ON DELETE NO ACTION
ON UPDATE NO ACTION
NOT DEFERRABLE;

ALTER TABLE USUARIO ADD CONSTRAINT estado_sesion_usuario_fk
FOREIGN KEY (idConexion)
REFERENCES CONEXION (idConexion)
ON DELETE NO ACTION
ON UPDATE NO ACTION
NOT DEFERRABLE;

ALTER TABLE PAQUETE ADD CONSTRAINT estado_paquete_paquete_fk
FOREIGN KEY (idEstado)
REFERENCES ESTADO_PAQUETE (idEstado)
ON DELETE NO ACTION
ON UPDATE NO ACTION
NOT DEFERRABLE;

ALTER TABLE PAQUETE_SIM ADD CONSTRAINT estado_paquete_paquete_sim_fk
FOREIGN KEY (idEstado)
REFERENCES ESTADO_PAQUETE (idEstado)
ON DELETE NO ACTION
ON UPDATE NO ACTION
NOT DEFERRABLE;

ALTER TABLE USUARIO ADD CONSTRAINT tipo_correo_usuario_fk
FOREIGN KEY (idTipoCorreo)
REFERENCES TIPO_CORREO (idTipoCorreo)
ON DELETE NO ACTION
ON UPDATE NO ACTION
NOT DEFERRABLE;

ALTER TABLE CLIENTE ADD CONSTRAINT tipo_correo_cliente_fk
FOREIGN KEY (idTipoCorreo)
REFERENCES TIPO_CORREO (idTipoCorreo)
ON DELETE NO ACTION
ON UPDATE NO ACTION
NOT DEFERRABLE;

ALTER TABLE CLIENTE ADD CONSTRAINT tipo_cliente_cliente_fk
FOREIGN KEY (idTipo)
REFERENCES TIPO_CLIENTE (idTipo)
ON DELETE NO ACTION
ON UPDATE NO ACTION
NOT DEFERRABLE;

ALTER TABLE VUELO ADD CONSTRAINT estado_vuelo_vuelo_fk
FOREIGN KEY (idEstado)
REFERENCES ESTADO_VUELO (idEstado)
ON DELETE NO ACTION
ON UPDATE NO ACTION
NOT DEFERRABLE;

ALTER TABLE VUELO_SIM ADD CONSTRAINT estado_vuelo_vuelo_sim_fk
FOREIGN KEY (idEstado)
REFERENCES ESTADO_VUELO (idEstado)
ON DELETE NO ACTION
ON UPDATE NO ACTION
NOT DEFERRABLE;

ALTER TABLE CLIENTE ADD CONSTRAINT tipo_doc_cliente_cliente_fk
FOREIGN KEY (idTipoDoc)
REFERENCES TIPO_DOCUMENTO (idTipoDoc)
ON DELETE NO ACTION
ON UPDATE NO ACTION
NOT DEFERRABLE;

ALTER TABLE USUARIO ADD CONSTRAINT tipo_documento_usuario_fk
FOREIGN KEY (idTipoDoc)
REFERENCES TIPO_DOCUMENTO (idTipoDoc)
ON DELETE NO ACTION
ON UPDATE NO ACTION
NOT DEFERRABLE;

ALTER TABLE ITINERARIO ADD CONSTRAINT tipo_escala_itinerario_fk
FOREIGN KEY (idTipo)
REFERENCES TIPO_ESCALA (idTipo)
ON DELETE NO ACTION
ON UPDATE NO ACTION
NOT DEFERRABLE;

ALTER TABLE ITINERARIO_SIM ADD CONSTRAINT tipo_escala_itinerario_sim_fk
FOREIGN KEY (idTipo)
REFERENCES TIPO_ESCALA (idTipo)
ON DELETE NO ACTION
ON UPDATE NO ACTION
NOT DEFERRABLE;

ALTER TABLE PERFIL ADD CONSTRAINT estado_perfil_perfil_fk
FOREIGN KEY (idEstado)
REFERENCES ESTADO_PERFIL (idEstado)
ON DELETE NO ACTION
ON UPDATE NO ACTION
NOT DEFERRABLE;

ALTER TABLE AVION ADD CONSTRAINT estado_avion_avion_fk
FOREIGN KEY (idEstado)
REFERENCES ESTADO_AVION (idEstado)
ON DELETE NO ACTION
ON UPDATE NO ACTION
NOT DEFERRABLE;

ALTER TABLE AVION_SIM ADD CONSTRAINT estado_avion_avion_sim_fk
FOREIGN KEY (idEstado)
REFERENCES ESTADO_AVION (idEstado)
ON DELETE NO ACTION
ON UPDATE NO ACTION
NOT DEFERRABLE;

ALTER TABLE ELEMENTO ADD CONSTRAINT tipo_elemento_elemento_fk
FOREIGN KEY (idTipo)
REFERENCES TIPO_ELEMENTO (idTipo)
ON DELETE NO ACTION
ON UPDATE NO ACTION
NOT DEFERRABLE;

ALTER TABLE INVENTARIO ADD CONSTRAINT movimiento_inventario_fk
FOREIGN KEY (idTipoMov)
REFERENCES TIPO_MOVIMIENTO (idTipoMov)
ON DELETE NO ACTION
ON UPDATE NO ACTION
NOT DEFERRABLE;

ALTER TABLE PAGO ADD CONSTRAINT tipo_pago_pago_fk
FOREIGN KEY (idTipo)
REFERENCES TIPO_PAGO (idTipo)
ON DELETE NO ACTION
ON UPDATE NO ACTION
NOT DEFERRABLE;

ALTER TABLE CLIENTE ADD CONSTRAINT estado_cliente_cliente_fk
FOREIGN KEY (idEstado)
REFERENCES ESTADO_CLIENTE (idEstado)
ON DELETE NO ACTION
ON UPDATE NO ACTION
NOT DEFERRABLE;

ALTER TABLE USUARIO ADD CONSTRAINT estado_usuario_usuario_fk
FOREIGN KEY (idEstado)
REFERENCES ESTADO_USUARIO (idEstado)
ON DELETE NO ACTION
ON UPDATE NO ACTION
NOT DEFERRABLE;

ALTER TABLE ITINERARIO ADD CONSTRAINT estado_itinerario_itinerario_fk
FOREIGN KEY (idEstado)
REFERENCES ESTADO_ITINERARIO (idEstado)
ON DELETE NO ACTION
ON UPDATE NO ACTION
NOT DEFERRABLE;

ALTER TABLE ITINERARIO_SIM ADD CONSTRAINT estado_itinerario_itinerario_sim_fk
FOREIGN KEY (idEstado)
REFERENCES ESTADO_ITINERARIO (idEstado)
ON DELETE NO ACTION
ON UPDATE NO ACTION
NOT DEFERRABLE;

ALTER TABLE NOTA_CREDITO ADD CONSTRAINT estado_nota_credito_nota_credito_fk
FOREIGN KEY (idEstado)
REFERENCES ESTADO_NOTA_CREDITO (idEstado)
ON DELETE NO ACTION
ON UPDATE NO ACTION
NOT DEFERRABLE;

ALTER TABLE ENVIO ADD CONSTRAINT estado_envio_envio_fk
FOREIGN KEY (idEstado)
REFERENCES ESTADO_ENVIO (idEstado)
ON DELETE NO ACTION
ON UPDATE NO ACTION
NOT DEFERRABLE;

ALTER TABLE AEROPUERTO ADD CONSTRAINT estado_aeropuerto_aeropuerto_fk
FOREIGN KEY (idEstado)
REFERENCES ESTADO_AEROPUERTO (idEstado)
ON DELETE NO ACTION
ON UPDATE NO ACTION
NOT DEFERRABLE;

ALTER TABLE AEROPUERTO_SIM ADD CONSTRAINT estado_aeropuerto_aeropuerto_sim_fk
FOREIGN KEY (idEstado)
REFERENCES ESTADO_AEROPUERTO (idEstado)
ON DELETE NO ACTION
ON UPDATE NO ACTION
NOT DEFERRABLE;

ALTER TABLE PERMISO ADD CONSTRAINT elemento_permiso_fk
FOREIGN KEY (idElemento)
REFERENCES ELEMENTO (idElemento)
ON DELETE NO ACTION
ON UPDATE NO ACTION
NOT DEFERRABLE;

ALTER TABLE AVION ADD CONSTRAINT tipo_avion_avion_fk
FOREIGN KEY (idTipo)
REFERENCES TIPO_AVION (idTipo)
ON DELETE NO ACTION
ON UPDATE NO ACTION
NOT DEFERRABLE;

ALTER TABLE AVION_SIM ADD CONSTRAINT tipo_avion_avion_sim_fk
FOREIGN KEY (idTipo)
REFERENCES TIPO_AVION (idTipo)
ON DELETE NO ACTION
ON UPDATE NO ACTION
NOT DEFERRABLE;

ALTER TABLE VUELO_SIM ADD CONSTRAINT avion_sim_vuelo_sim_fk
FOREIGN KEY (idAvion)
REFERENCES AVION_SIM (idAvion)
ON DELETE NO ACTION
ON UPDATE NO ACTION
NOT DEFERRABLE;

ALTER TABLE PAIS ADD CONSTRAINT continente_pais_fk
FOREIGN KEY (idContinente)
REFERENCES CONTINENTE (idContinente)
ON DELETE NO ACTION
ON UPDATE NO ACTION
NOT DEFERRABLE;

ALTER TABLE CIUDAD ADD CONSTRAINT pais_ciudad_fk
FOREIGN KEY (idPais)
REFERENCES PAIS (idPais)
ON DELETE NO ACTION
ON UPDATE NO ACTION
NOT DEFERRABLE;

ALTER TABLE DIVISA ADD CONSTRAINT pais_monedaxpais_fk
FOREIGN KEY (idPais)
REFERENCES PAIS (idPais)
ON DELETE NO ACTION
ON UPDATE NO ACTION
NOT DEFERRABLE;

ALTER TABLE IMPUESTO ADD CONSTRAINT pais_impuesto_fk
FOREIGN KEY (idPais)
REFERENCES PAIS (idPais)
ON DELETE NO ACTION
ON UPDATE NO ACTION
NOT DEFERRABLE;

ALTER TABLE VUELO ADD CONSTRAINT avion_vuelo_fk
FOREIGN KEY (idAvion)
REFERENCES AVION (idAvion)
ON DELETE NO ACTION
ON UPDATE NO ACTION
NOT DEFERRABLE;

ALTER TABLE AEROPUERTO ADD CONSTRAINT ciudad_aeropuerto_fk
FOREIGN KEY (idCiudad)
REFERENCES CIUDAD (idCiudad)
ON DELETE NO ACTION
ON UPDATE NO ACTION
NOT DEFERRABLE;

ALTER TABLE CLIENTE ADD CONSTRAINT ciudad_cliente_fk
FOREIGN KEY (idCiudad)
REFERENCES CIUDAD (idCiudad)
ON DELETE NO ACTION
ON UPDATE NO ACTION
NOT DEFERRABLE;

ALTER TABLE AEROPUERTO_SIM ADD CONSTRAINT ciudad_aeropuerto_sim_fk
FOREIGN KEY (idCiudad)
REFERENCES CIUDAD (idCiudad)
ON DELETE NO ACTION
ON UPDATE NO ACTION
NOT DEFERRABLE;

ALTER TABLE PRONOSTICO_SIM ADD CONSTRAINT aeropuerto_sim_pronostico_sim_fk
FOREIGN KEY (idAeropuerto)
REFERENCES AEROPUERTO_SIM (idAeropuerto)
ON DELETE NO ACTION
ON UPDATE NO ACTION
NOT DEFERRABLE;

ALTER TABLE VUELO_SIM ADD CONSTRAINT aeropuerto_sim_vuelo_sim_fk
FOREIGN KEY (idOrigen)
REFERENCES AEROPUERTO_SIM (idAeropuerto)
ON DELETE NO ACTION
ON UPDATE NO ACTION
NOT DEFERRABLE;

ALTER TABLE VUELO_SIM ADD CONSTRAINT aeropuerto_sim_vuelo_sim_fk1
FOREIGN KEY (idDestino)
REFERENCES AEROPUERTO_SIM (idAeropuerto)
ON DELETE NO ACTION
ON UPDATE NO ACTION
NOT DEFERRABLE;

ALTER TABLE ITINERARIO_SIM ADD CONSTRAINT vuelo_sim_itinerario_sim_fk
FOREIGN KEY (idVuelo)
REFERENCES VUELO_SIM (idVuelo)
ON DELETE NO ACTION
ON UPDATE NO ACTION
NOT DEFERRABLE;

ALTER TABLE ENVIO ADD CONSTRAINT cliente_envio_fk
FOREIGN KEY (idCliente)
REFERENCES CLIENTE (idCliente)
ON DELETE NO ACTION
ON UPDATE NO ACTION
NOT DEFERRABLE;

ALTER TABLE PRONOSTICO ADD CONSTRAINT aeropuerto_pronostico_fk
FOREIGN KEY (idAeropuerto)
REFERENCES AEROPUERTO (idAeropuerto)
ON DELETE NO ACTION
ON UPDATE NO ACTION
NOT DEFERRABLE;

ALTER TABLE VUELO ADD CONSTRAINT aeropuerto_vuelo_fk
FOREIGN KEY (idOrigen)
REFERENCES AEROPUERTO (idAeropuerto)
ON DELETE NO ACTION
ON UPDATE NO ACTION
NOT DEFERRABLE;

ALTER TABLE VUELO ADD CONSTRAINT aeropuerto_vuelo_fk1
FOREIGN KEY (idDestino)
REFERENCES AEROPUERTO (idAeropuerto)
ON DELETE NO ACTION
ON UPDATE NO ACTION
NOT DEFERRABLE;

ALTER TABLE INVENTARIO ADD CONSTRAINT aeropuerto_inventario_fk
FOREIGN KEY (idAeropuerto)
REFERENCES AEROPUERTO (idAeropuerto)
ON DELETE NO ACTION
ON UPDATE NO ACTION
NOT DEFERRABLE;

ALTER TABLE USUARIO ADD CONSTRAINT aeropuerto_usuario_fk
FOREIGN KEY (idAeropuerto)
REFERENCES AEROPUERTO (idAeropuerto)
ON DELETE NO ACTION
ON UPDATE NO ACTION
NOT DEFERRABLE;

ALTER TABLE ENVIO ADD CONSTRAINT aeropuerto_envio_fk
FOREIGN KEY (idAeropuerto)
REFERENCES AEROPUERTO (idAeropuerto)
ON DELETE NO ACTION
ON UPDATE NO ACTION
NOT DEFERRABLE;

ALTER TABLE ITINERARIO ADD CONSTRAINT vuelo_escala_fk
FOREIGN KEY (idVuelo)
REFERENCES VUELO (idVuelo)
ON DELETE NO ACTION
ON UPDATE NO ACTION
NOT DEFERRABLE;

ALTER TABLE PERMISO ADD CONSTRAINT perfil_permiso_fk
FOREIGN KEY (idPerfil)
REFERENCES PERFIL (idPerfil)
ON DELETE NO ACTION
ON UPDATE NO ACTION
NOT DEFERRABLE;

ALTER TABLE USUARIO ADD CONSTRAINT perfil_usuario_fk
FOREIGN KEY (idPerfil)
REFERENCES PERFIL (idPerfil)
ON DELETE NO ACTION
ON UPDATE NO ACTION
NOT DEFERRABLE;

ALTER TABLE LOG ADD CONSTRAINT perfil_log_fk
FOREIGN KEY (idPerfil)
REFERENCES PERFIL (idPerfil)
ON DELETE NO ACTION
ON UPDATE NO ACTION
NOT DEFERRABLE;

ALTER TABLE SESION ADD CONSTRAINT usuario_login_fallido_fk
FOREIGN KEY (idUsuario)
REFERENCES USUARIO (idUsuario)
ON DELETE NO ACTION
ON UPDATE NO ACTION
NOT DEFERRABLE;

ALTER TABLE INVENTARIO ADD CONSTRAINT usuario_inventario_fk
FOREIGN KEY (idUsuario)
REFERENCES USUARIO (idUsuario)
ON DELETE NO ACTION
ON UPDATE NO ACTION
NOT DEFERRABLE;

ALTER TABLE ENVIO ADD CONSTRAINT usuario_envio_fk
FOREIGN KEY (idUsuario)
REFERENCES USUARIO (idUsuario)
ON DELETE NO ACTION
ON UPDATE NO ACTION
NOT DEFERRABLE;

ALTER TABLE NOTA_CREDITO ADD CONSTRAINT usuario_nota_credito_fk
FOREIGN KEY (idUsuario)
REFERENCES USUARIO (idUsuario)
ON DELETE NO ACTION
ON UPDATE NO ACTION
NOT DEFERRABLE;

ALTER TABLE PAGO ADD CONSTRAINT usuario_pago_fk
FOREIGN KEY (idUsuario)
REFERENCES USUARIO (idUsuario)
ON DELETE NO ACTION
ON UPDATE NO ACTION
NOT DEFERRABLE;

ALTER TABLE PASSWORD ADD CONSTRAINT usuario_password_fk
FOREIGN KEY (idUsuario)
REFERENCES USUARIO (idUsuario)
ON DELETE NO ACTION
ON UPDATE NO ACTION
NOT DEFERRABLE;

ALTER TABLE LOG ADD CONSTRAINT usuario_log_fk
FOREIGN KEY (idUsuario)
REFERENCES USUARIO (idUsuario)
ON DELETE NO ACTION
ON UPDATE NO ACTION
NOT DEFERRABLE;

ALTER TABLE PAQUETE ADD CONSTRAINT envio_paquete_fk
FOREIGN KEY (idEnvio)
REFERENCES ENVIO (idEnvio)
ON DELETE NO ACTION
ON UPDATE NO ACTION
NOT DEFERRABLE;

ALTER TABLE PAGO ADD CONSTRAINT envio_pago_fk
FOREIGN KEY (idEnvio)
REFERENCES ENVIO (idEnvio)
ON DELETE NO ACTION
ON UPDATE NO ACTION
NOT DEFERRABLE;

ALTER TABLE NOTA_CREDITO ADD CONSTRAINT envio_nota_credito_fk
FOREIGN KEY (idEnvio)
REFERENCES ENVIO (idEnvio)
ON DELETE NO ACTION
ON UPDATE NO ACTION
NOT DEFERRABLE;

ALTER TABLE INVENTARIO ADD CONSTRAINT envio_inventario_fk
FOREIGN KEY (idEnvio)
REFERENCES ENVIO (idEnvio)
ON DELETE NO ACTION
ON UPDATE NO ACTION
NOT DEFERRABLE;

ALTER TABLE ITINERARIO ADD CONSTRAINT envio_escala_fk
FOREIGN KEY (idEnvio)
REFERENCES ENVIO (idEnvio)
ON DELETE NO ACTION
ON UPDATE NO ACTION
NOT DEFERRABLE;

ALTER TABLE ITINERARIO_SIM ADD CONSTRAINT envio_itinerario_sim_fk
FOREIGN KEY (idEnvio)
REFERENCES ENVIO (idEnvio)
ON DELETE NO ACTION
ON UPDATE NO ACTION
NOT DEFERRABLE;

ALTER TABLE PAQUETE_SIM ADD CONSTRAINT envio_paquete_sim_fk
FOREIGN KEY (idEnvio)
REFERENCES ENVIO (idEnvio)
ON DELETE NO ACTION
ON UPDATE NO ACTION
NOT DEFERRABLE;

CREATE LANGUAGE plpgsql;

CREATE FUNCTION fbi_password() RETURNS trigger AS $$
begin
	update password set idestado=2 where idusuario = new.idusuario;
	return new;
end;
$$ LANGUAGE plpgsql;

CREATE TRIGGER tbi_password BEFORE INSERT ON password 
FOR EACH ROW EXECUTE PROCEDURE fbi_password();

CREATE FUNCTION volcado_simulacion() RETURNS VOID AS $$
begin
	delete from ITINERARIO_SIM;
	delete from VUELO_SIM;
	delete from AVION_SIM;
	delete from PRONOSTICO_SIM;
	delete from AEROPUERTO_SIM;
	delete from PAQUETE_SIM;

	insert into avion_sim select * from avion;
	insert into aeropuerto_sim select * from aeropuerto;
	insert into vuelo_sim select * from vuelo;
end;
$$ LANGUAGE plpgsql;

